#pragma once

#include "variantExtensions.h"
#include <armadillo>

/****************************************************************************************
*
*	MathLink GetValue Extension
*
****************************************************************************************/

bool MLGetValue(MLINK mlp, arma::uvec* value);

bool MLGetValue(MLINK mlp, arma::ivec* value);

bool MLGetValue(MLINK mlp, arma::vec* value);

bool MLGetValue(MLINK mlp, arma::cx_vec* value);

bool MLGetValue(MLINK mlp, std::vector<arma::uvec>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::ivec>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::vec>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::cx_vec>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::uvec4>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::ivec4>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::vec4>* value);

bool MLGetValue(MLINK mlp, std::vector<arma::cx_vec4>* value);
/****************************************************************************************
*
*	MathLink PutValue Extension
*
****************************************************************************************/

bool MLPutValue(MLINK mlp, const arma::sp_cx_mat &value);

bool MLPutValue(MLINK mlp, arma::vec2 value);
bool MLPutValue(MLINK mlp, std::pair<arma::vec2,double> value);
bool MLPutValue(MLINK mlp, arma::field<std::pair<arma::vec2,double>> value);